package es.ucm.fdi.healthpred.vista;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;

/**
 * Campo de texto que s&oacute;lo admite ocho d&iacute;gitos seguidos de una
 * letra que sea v&aacute;lida para el n&uacute;mero de DNI espa&ntilde;ol.
 * 
 * @since 1.0
 * 
 * @version 1.0
 * 
 * @author &Aacute;lvaro G&oacute;mez Porris
 * @author V&iacute;ctor L&oacute;pez Monte
 * @author Carlos Rodr&iacute;guez Colliga
 * 
 */
public class JTextFieldDni extends JTextFieldLimite {

	private static final long serialVersionUID = 1L;

	/**
	 * M&aacute;ximo n&uacute;mero de caracteres admitidos.
	 */
	public static final int MAX_CHARS = 9;

	/**
	 * @param editor
	 */
	public JTextFieldDni(final JTextFieldFoco editor) {
		super(editor, MAX_CHARS);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see es.ucm.fdi.healthpred.vista.JTextFieldLimite#insertString(int,
	 * java.lang.String, javax.swing.text.AttributeSet)
	 */
	public void insertString(int arg0, String arg1, AttributeSet arg2)
			throws BadLocationException {
		int nuevaLongitud = arg0 + arg1.length();
		if (nuevaLongitud == MAX_CHARS) {
			if (esLetraCorrecta(arg1.charAt(arg1.length() - 1))) {
				super.insertString(arg0, arg1.toUpperCase(), arg2);
			}
		} else {
			if (esNumero(arg1.charAt(arg1.length() - 1))) {
				super.insertString(arg0, arg1, arg2);
			}
		}
	}

	private boolean esLetraCorrecta(Character c) {
		String letrasDni = new String("TRWAGMYFPDXBNJZSQVHLCKE");
		return (letrasDni.indexOf(c.toString().toUpperCase()) > -1);
	}

	private boolean esNumero(Character c) {
		String numsDni = new String("0123456789");
		return (numsDni.indexOf(c.toString()) > -1);
	}
}
